#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <sstream>
#include <stdio.h>
#include <string.h>

#include <map>
#include <vector>
#include <algorithm>


using namespace std;


int split(vector<string>& v, const string& str, char c)
{
v.clear();
string::const_iterator s = str.begin();
while (true) {
  string::const_iterator begin = s;

  while (*s != c && s != str.end()) { ++s; }

  v.push_back(string(begin, s));
  if (s == str.end()) {
    break;
  }
  if (++s == str.end()) {
    v.push_back("");
    break;
  }
}

}


std::string convert( double x )
{
   std::ostringstream oss;
   oss << x;
   return oss.str();
}
	 



int main(int argc, char *argv[ ]){

ifstream archivo;
ofstream salida;
int f,l,i,s;
s=0;
if(argc < 2){
  cout << "\nError: No se tiene el numero indicado de argumentos" << endl;
  cout << "Ayuda: ./generador_estatico -h \n" << endl;
  return -1;
}


for(i = 0; i < argc; i++){

 if(!strcmp(argv[i],"-h")){
    cout << endl<< endl;
    cout << "---=== AYUDA ===---" << endl << endl;
    cout << "Modo de ejecucion" << endl;
    cout << "./generador_estatico -f <archivo de entrada>\n" << endl;
    cout << endl << endl;
    return -1;
 }



 if(!strcmp(argv[i],"-f")){
   f=i+1;
   fprintf(stderr,"got to line %d\n",__LINE__);
   archivo.open(argv[f]);
   if(!archivo){
     cout << "Fallo al intentar abrir el archivo: " << argv[f] << endl;
     return -1;
   }
    fprintf(stderr,"got to line %d\n",__LINE__);
 }

}



int j=0;
vector<string> v(42);
vector<string> v3(3);


string linea;



map<int, vector<string> > matriz;
map<string,int> tipos_matriz;

map<int, vector<double> > matriz2;



int h=0;
ifstream tipos_default("tipos_default.dat");

while(! tipos_default.eof())
{
  getline (tipos_default,linea);
  split(v, linea, ',');


  tipos_matriz[v[1].c_str()]=atoi(v[0].c_str());


  h++;

}

ifstream todos_atributos("atributos.dat");


map<int, map<string,double> > atributos;

while(! todos_atributos.eof())
{
  getline (todos_atributos,linea);
  split(v3, linea, ',');


  atributos[atoi(v3[0].c_str())][v3[1].c_str()]=atof(v3[0].c_str());



}


int c=42;
while(! archivo.eof())
{
  getline (archivo,linea);
  split(v, linea, ',');


  matriz[0]=v;

  matriz[0][1]=convert(atributos[1][matriz[0][1]]);
  matriz[0][2]=convert(atributos[2][matriz[0][2]]);
  matriz[0][3]=convert(atributos[3][matriz[0][3]]);

//cout << matriz[i][40]<< endl;


  matriz[0][41]=convert(tipos_matriz[matriz[0][41]]);

  for(j=0;j<c;j++){

    if(j!=c+2){
      cout << matriz[0][j] << " ";
    }
    else{

      cout << matriz[0][j];
    }
  }

  cout << endl;

}

   fprintf(stderr,"got to line %d\n",__LINE__);

   return 1;



}







